import java.util.Arrays;

/**
 * Created by xiebang
 * Description
 * User:小谢
 * Date:2021-08-04
 * Time:12:22
 */
public class myArraySeqList {
   public int[] array;//数组未初始化 array = null;
   public int sizeList = 0;//存储当前顺序表中元素的个数
   public int capacity = 10;//顺序表的容量
    public myArraySeqList() {
        this.array = new int[capacity];
    }
    //打印顺序表
    public void display() {
        for (int i = 0; i < this.sizeList; i++) {
            System.out.print(this.array[i] + " ");
        }
        System.out.println();
    }



    /**
     * 判断顺序表是否满了
     * @return 返回true表示顺序表已满，返回false表示没有
     */
    public boolean isFull() {
        return this.sizeList == this.capacity;
    }

    /**
     * 判断链表是否为空
     * @return 返回true表示顺序表为空，返回false表示不为空
     */
    public boolean isEmpty() {
        return this.sizeList == 0;
    }

    /**
     * 在pos下标添加数据data
     * @param pos 添加数据的下标
     * @param data 要添加的数据
     */
    public void add(int pos,int data) {
        //判断顺序表是否满了,如果满了要扩容
        if (isFull()) {
            this.array = Arrays.copyOf(this.array,2*capacity);
            capacity *= 2;
        }

        //判断坐标是否合法
        if(pos < 0 || pos > this.sizeList) {
            System.out.println("pos不合法");
            return;
        }

        for(int i = this.sizeList - 1; i >= pos; i--) {
            this.array[i + 1] =this.array[i];
        }
        this.array[pos] = data;
        this.sizeList++;
    }

    /**
     * 查找是否包含某个元素
     * @param tofind 要查找的数字
     * @return 返回true表示顺序含有该元素，返回false表示不含有
     */
    public boolean contains(int tofind) {
        //判断顺序表是否为空
        if (isFull()) {
            System.out.println("顺序表为空");
            return false;
        }

        for (int i = 0; i < this.sizeList; i++) {
            if(this.array[i] == tofind) {
                return true;
            }
        }
        return false;
    }

    /**
     * 查找某个元素，并返回下标
     * @param tofind 查找的元素
     * @return 若找到，返回该元素的下标，否则返回-1
     */
    public int search(int tofind) {
        //判断顺序表是否为空
        if (isFull()) {
            System.out.println("顺序表为空");
            return -1;
        }
        //判断是否包含该元素
        if (contains(tofind)) {
            for (int i = 0; i < this.sizeList; i++) {
                if(this.array[i] == tofind) {
                    return i;
                }
            }
        }
        return -1;
    }

    /**
     * 获取pos坐标的值
     * @param pos 需要获取值的坐标
     * @return 若坐标合法，则返回值，不合法返回-1，并输出是什么异常
     */
    public int getPos(int pos) {
        //判断顺序表是否为空
        if (isFull()) {
            System.out.println("顺序表为空");
            return -1;
        }
        //判断坐标是否合法
        if (pos < 0 || pos >= this.sizeList) {
            System.out.println("pos坐标非法");
            return -1;
        }
        return this.array[pos];
    }

    /**
     * 设置pos坐标的值为 value
     * @param pos 设置的坐标
     * @param value 设置的值
     */
    public void setPos(int pos,int value) {
        //判断顺序表是否为空
        if (isFull()) {
            System.out.println("顺序表为空");
            return;
        }
        //判断坐标是否合法
        if (pos < 0 || pos >= this.sizeList) {
            System.out.println("pos坐标非法");
            return;
        }
        this.array[pos] = value;
    }

    /**
     * 删除某个元素
     * @param toRemove 要删除的值
     */
    public void remove(int toRemove) {
        //判断顺序表是否为空
        if (isFull()) {
            System.out.println("顺序表为空");
            return;
        }

        //查找toRemove的坐标
        int pos = this.search(toRemove);
        //判断坐标是否合法
        if(pos == -1){
            System.out.println("没有找到要删除的数字");
            return;
        }

        //删除数字
        for (int i = pos; i < this.sizeList - 1; i++) {
            this.array[i] = this.array[i + 1];
        }
        this.sizeList--;
    }

    /**
     * 获取顺序表的长度
     * @return 顺序表的长度
     */
    public int getSize() {
        return this.sizeList;
    }

    /**
     * 清空顺序表
     */
    public void clear() {
        for (int i = 0; i < this.sizeList; i++) {
            this.array[i] = 0;
        }
        this.sizeList = 0;
    }
}
